// 音频管理器 - 支持背景音乐和语音播报
export class AudioManager {
  constructor() {
    this.isSfxEnabled = false; // 默认关闭语音
    this._isMusicEnabled = false; // 默认关闭背景音乐
    this.backgroundMusic = null;
    this.currentVolume = 0.3; // 背景音乐音量
    
    // 加载用户设置
    this.loadSettings();
  }

  // 初始化音频系统
  async init() {
    try {
      // 初始化背景音乐
      this.backgroundMusic = new Audio('./audio/bgmusic.mp3');
      this.backgroundMusic.loop = true;
      this.backgroundMusic.volume = this.currentVolume;
      
      // 预加载音频
      this.backgroundMusic.load();
      
      console.log('音频系统初始化完成');
    } catch (error) {
      console.warn('音频初始化失败:', error);
    }
  }

  // 播放音效（空实现，不播放任何音效）
  async playSound(soundName) {
    // 不播放任何音效
    return;
  }

  // 播放洗牌音效
  async playShuffleSound() {
    try {
      const shuffleAudio = new Audio('./audio/xipai.mp3');
      shuffleAudio.volume = 0.5; // 适中的音量
      await shuffleAudio.play();
      console.log('洗牌音效播放完成');
    } catch (error) {
      console.warn('洗牌音效播放失败:', error);
    }
  }

  // 开始背景音乐
  async startBackgroundMusic() {
    console.log('startBackgroundMusic called, _isMusicEnabled:', this._isMusicEnabled, 'backgroundMusic:', this.backgroundMusic);
    
    if (!this._isMusicEnabled || !this.backgroundMusic) {
      console.log('背景音乐未启动，原因:', !this._isMusicEnabled ? '音乐开关关闭' : '背景音乐对象不存在');
      return;
    }
    
    try {
      // 重置音量
      this.backgroundMusic.volume = this.currentVolume;
      
      const playPromise = this.backgroundMusic.play();
      if (playPromise !== undefined) {
        await playPromise;
      }
      console.log('背景音乐开始播放');
    } catch (error) {
      console.warn('背景音乐播放失败:', error);
    }
  }

  // 停止背景音乐
  stopBackgroundMusic() {
    if (this.backgroundMusic) {
      this.backgroundMusic.pause();
      this.backgroundMusic.currentTime = 0;
      console.log('背景音乐已停止');
    }
  }

  // 切换音乐开关
  toggleMusic() {
    this._isMusicEnabled = !this._isMusicEnabled;
    this.saveSettings();
    
    if (this._isMusicEnabled) {
      this.startBackgroundMusic();
    } else {
      this.stopBackgroundMusic();
    }
  }

  // 切换音效开关
  toggleSfx() {
    this.isSfxEnabled = !this.isSfxEnabled;
    this.saveSettings();
  }

  // 设置音乐音量
  setMusicVolume(volume) {
    this.currentVolume = Math.max(0, Math.min(1, volume));
    if (this.backgroundMusic) {
      this.backgroundMusic.volume = this.currentVolume;
    }
    this.saveSettings();
  }

  // 保存设置到本地存储
  saveSettings() {
    const settings = {
      isSfxEnabled: this.isSfxEnabled,
      // 不保存音乐开关状态，每次都默认关闭
      // isMusicEnabled: this._isMusicEnabled,
      musicVolume: this.currentVolume
    };
    localStorage.setItem('audioSettings', JSON.stringify(settings));
  }

  // 从本地存储加载设置
  loadSettings() {
    try {
      const settings = JSON.parse(localStorage.getItem('audioSettings') || '{}');
      this.isSfxEnabled = settings.isSfxEnabled ?? false; // 默认关闭
      
      // 音乐开关默认关闭，不从localStorage加载
      this._isMusicEnabled = false; // 每次都默认关闭背景音乐
      
      this.currentVolume = settings.musicVolume ?? 0.3; // 默认音量30%
      
      console.log('音频设置已加载:', {
        isSfxEnabled: this.isSfxEnabled,
        isMusicEnabled: this._isMusicEnabled,
        musicVolume: this.currentVolume
      });
    } catch (error) {
      console.warn('加载音频设置失败:', error);
    }
  }

  // 重置为默认设置
  resetToDefault() {
    this.isSfxEnabled = false;
    this._isMusicEnabled = false; // 默认关闭背景音乐
    this.currentVolume = 0.3;
    this.saveSettings();
  }

  // 语音合成播报
  speak(text) {
    console.log('语音播报请求:', text, '语音开关状态:', this.isSfxEnabled);
    if (!this.isSfxEnabled) return;
    
    try {
      // 停止当前正在播放的语音
      speechSynthesis.cancel();
      
      const utterance = new SpeechSynthesisUtterance(text);
      utterance.lang = 'zh-CN';
      utterance.volume = 0.7;
      utterance.rate = 1.1;
      utterance.pitch = 1;
      
      speechSynthesis.speak(utterance);
    } catch (error) {
      console.warn('语音播报失败:', error);
    }
  }

  // 获取音乐开关状态
  get isMusicEnabled() {
    return this._isMusicEnabled;
  }

  // 获取音乐音量
  get musicVolume() {
    return this.currentVolume;
  }
}

// 创建全局音频管理器实例
export const audioManager = new AudioManager();